#include "Widget.h"

#include <QApplication>

#include <QListView>
#include <QStringListModel>
#include <QString>
#include <QList>
#include <QPair>
#include <algorithm>

// 解析输入数据并排序
QList<QPair<int, QString>> parseAndSortData(const QStringList& input) {
    QList<QPair<int, QString>> data;

    for (const QString& line : input) {
        QStringList parts = line.split('|');
        if (parts.size() == 3) {
            QString countStr = parts[0].mid(1); // 去掉前缀 'F'
            int count = countStr.toInt();
            data.append(qMakePair(count, line));
        }
    }

    // 按次数从大到小排序
    std::sort(data.begin(), data.end(), [](const QPair<int, QString>& a, const QPair<int, QString>& b) {
        return a.first > b.first;
    });

    return data;
}

// 添加序号列
QStringList addIndexColumn(const QList<QPair<int, QString>>& sortedData) {
    QStringList result;
    int index = 1;

    for (const QPair<int, QString>& item : sortedData) {
        QString line = QString::number(index) + "|" + item.second;
        result.append(line);
        if (index == 10) break; // 只取前十行
        index++;
    }

    return result;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // Widget w;
    // w.show();

    // 示例数据
    QStringList inputData = {
        "F234|aaa|Computer",
        "F3|bbb|Explorer",
        "F0|ccc|MyDocument",
        "F8|ddd|ie",
        "F9|eee|notepad",
        "F0|fff|mspaint",
        "F7|ggg|cmd",
        "F5|hhh|Calc",
        "F0|ttt|Desktop",
        "F0|sss|msconfig",
        "F4|eaa|Reg",
        "F0|www|myip",
        "F0|qqq|dev",
        "F0|zzz|Taskmgr",
        "F0|vvv|ShutDown"
    };

    // 解析并排序数据
    QList<QPair<int, QString>> sortedData = parseAndSortData(inputData);
    // 添加序号列
    QStringList indexedData = addIndexColumn(sortedData);

    // 创建QListView并显示数据
    QListView listView;
    QStringListModel model(indexedData);
    listView.setModel(&model);

    listView.show();

    return a.exec();
}
